/*     */ package com.zimbra.cs.mailbox.util;
/*     */ 
/*     */ import com.zimbra.common.util.Pair;
/*     */ import com.zimbra.cs.mailbox.MailItem.Type;
/*     */ import java.util.ArrayList;
/*     */ import java.util.Collection;
/*     */ import java.util.EnumMap;
/*     */ import java.util.EnumSet;
/*     */ import java.util.Iterator;
/*     */ import java.util.List;
/*     */ import java.util.Map;
/*     */ import java.util.Map.Entry;
/*     */ import java.util.Set;
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ public final class TypedIdList
/*     */   implements Iterable<Map.Entry<MailItem.Type, List<ItemInfo>>>
/*     */ {
/*     */   public TypedIdList() {}
/*     */   
/*     */   public static class ItemInfo
/*     */     extends Pair<Integer, String>
/*     */   {
/*     */     public ItemInfo(Integer id, String uuid)
/*     */     {
/*  33 */       super(uuid);
/*     */     }
/*     */     
/*     */     public Integer getId() {
/*  37 */       return (Integer)getFirst();
/*     */     }
/*     */     
/*     */     public String getUuid() {
/*  41 */       return (String)getSecond();
/*     */     }
/*     */   }
/*     */   
/*  45 */   private final Map<MailItem.Type, List<ItemInfo>> type2ids = new EnumMap(MailItem.Type.class);
/*     */   
/*     */ 
/*     */ 
/*     */   public TypedIdList(TypedIdList other)
/*     */   {
/*  51 */     this();
/*  52 */     addAll(other);
/*     */   }
/*     */   
/*     */   public void add(MailItem.Type type, Integer id, String uuid)
/*     */   {
/*  57 */     if (id == null) {
/*  58 */       return;
/*     */     }
/*  60 */     List<ItemInfo> items = (List)this.type2ids.get(type);
/*  61 */     if (items == null) {
/*  62 */       this.type2ids.put(type, items = new ArrayList(1));
/*     */     }
/*  64 */     items.add(new ItemInfo(id, uuid));
/*     */   }
/*     */   
/*     */   public void addAll(TypedIdList other)
/*     */   {
/*  69 */     if ((other == null) || (other.isEmpty())) {
/*  70 */       return;
/*     */     }
/*  72 */     for (Map.Entry<MailItem.Type, List<ItemInfo>> row : other.type2ids.entrySet()) {
/*  73 */       MailItem.Type type = (MailItem.Type)row.getKey();
/*  74 */       List<ItemInfo> items = (List)this.type2ids.get(type);
/*  75 */       if (items == null) {
/*  76 */         this.type2ids.put(type, items = new ArrayList(((List)row.getValue()).size()));
/*     */       }
/*  78 */       items.addAll((Collection)row.getValue());
/*     */     }
/*     */   }
/*     */   
/*     */ 
/*     */ 
/*     */   public boolean remove(MailItem.Type type, Integer id)
/*     */   {
/*  86 */     if (id == null) {
/*  87 */       return false;
/*     */     }
/*     */     
/*  90 */     List<ItemInfo> items = (List)this.type2ids.get(type);
/*  91 */     Iterator<ItemInfo> it; if (items != null) {
/*  92 */       for (it = items.iterator(); it.hasNext();) {
/*  93 */         if (id.equals(((ItemInfo)it.next()).getId())) {
/*  94 */           it.remove();
/*  95 */           if (items.isEmpty()) {
/*  96 */             this.type2ids.remove(type);
/*     */           }
/*  98 */           return true;
/*     */         }
/*     */       }
/*     */     }
/* 102 */     return false;
/*     */   }
/*     */   
/*     */   public void remove(MailItem.Type type)
/*     */   {
/* 107 */     this.type2ids.remove(type);
/*     */   }
/*     */   
/*     */   public boolean contains(Integer id) {
/* 111 */     for (List<ItemInfo> set : this.type2ids.values()) {
/* 112 */       for (ItemInfo entry : set) {
/* 113 */         if (id.equals(entry.getId())) {
/* 114 */           return true;
/*     */         }
/*     */       }
/*     */     }
/* 118 */     return false;
/*     */   }
/*     */   
/*     */   public Set<MailItem.Type> types() {
/* 122 */     Set<MailItem.Type> types = this.type2ids.keySet();
/* 123 */     return types.isEmpty() ? EnumSet.noneOf(MailItem.Type.class) : EnumSet.copyOf(this.type2ids.keySet());
/*     */   }
/*     */   
/*     */   public List<Integer> getIds(Set<MailItem.Type> types) {
/* 127 */     List<Integer> ids = null;
/* 128 */     for (MailItem.Type type : types) { List<Integer> typedIds;
/* 129 */       if ((typedIds = getIds(type)) != null)
/*     */       {
/*     */ 
/* 132 */         if (ids == null) {
/* 133 */           ids = new ArrayList(typedIds.size());
/*     */         }
/* 135 */         ids.addAll(typedIds);
/*     */       } }
/* 137 */     return ids;
/*     */   }
/*     */   
/*     */   public List<Integer> getIds(MailItem.Type type) {
/* 141 */     List<ItemInfo> items = (List)this.type2ids.get(type);
/* 142 */     if (items == null) {
/* 143 */       return null;
/*     */     }
/*     */     
/* 146 */     List<Integer> ids = new ArrayList(items.size());
/* 147 */     for (ItemInfo pair : items) {
/* 148 */       ids.add(pair.getId());
/*     */     }
/* 150 */     return ids;
/*     */   }
/*     */   
/*     */   public List<Integer> getAllIds() {
/* 154 */     List<Integer> ids = new ArrayList();
/* 155 */     for (List<ItemInfo> set : this.type2ids.values()) {
/* 156 */       for (ItemInfo pair : set) {
/* 157 */         ids.add(pair.getId());
/*     */       }
/*     */     }
/* 160 */     return ids;
/*     */   }
/*     */   
/*     */   public int size() {
/* 164 */     int size = 0;
/* 165 */     for (List<ItemInfo> set : this.type2ids.values()) {
/* 166 */       size += set.size();
/*     */     }
/* 168 */     return size;
/*     */   }
/*     */   
/*     */   public Iterator<Map.Entry<MailItem.Type, List<ItemInfo>>> iterator()
/*     */   {
/* 173 */     return this.type2ids.entrySet().iterator();
/*     */   }
/*     */   
/*     */   public boolean isEmpty() {
/* 177 */     return this.type2ids.isEmpty();
/*     */   }
/*     */   
/*     */   public void clear() {
/* 181 */     this.type2ids.clear();
/*     */   }
/*     */   
/*     */   public String toString()
/*     */   {
/* 186 */     return this.type2ids.toString();
/*     */   }
/*     */ }


/* Location:              /home/mint/zimbrastore.jar!/com/zimbra/cs/mailbox/util/TypedIdList.class
 * Java compiler version: 7 (51.0)
 * JD-Core Version:       0.7.1
 */